// 封装axios 并导出
import axios from "axios";
import Cookies from "js-cookie";

// 定义封装axios 一般处理两件事情
// 01: 定义公共的baseurl timeout header
// 02: 定义axios 请求拦截器和响应拦截器

// 请求拦截器(拦截所有的axios请求)
axios.interceptors.request.use(
  function (config) {
    // 获取登录时存在cookie中的jwt字段
    const jwt = Cookies.get("jwt");
    if (jwt) {
      config.headers["Authorization"] = jwt;
    }

    return config;
  },
  function (error) {
    // Do something with request error
    return Promise.reject(error);
  }
);

// 响应拦截器
axios.interceptors.response.use(
  function (res) {
    // 一般用于 一般对一些公共响应做判断,比如进行状态码的判断
    // 实时更新 token, 因为token 中时间戳,后端获取时间戳进行当前的登录延时操作判断
    // 每次请求接口都会返回jwt这个标识字段,用最新返回的jwt 去替换掉之前cookie 中的jwt,这样最新的jwt基础上延迟2小时
    if (res.data.context && res.data.context.jwt) {
      Cookies.set("jwt", res.data.context.jwt);
    }

    return res;
  },
  function (error) {
    // Do something with response error
    return Promise.reject(error);
  }
);

export default axios;
